[ Day 6 ]
說明:
在昨天介紹了使用mysql直連mysql資料庫,但下原生語句的方式一來對資料庫相依性太高
二來在程式碼中要管理一堆SQL語句字串,並不是很好維護。
因此今天來介紹knex.js這個Query Builder套件,簡化語句。
一、安裝knex
npm i knex --save
二、config配置與連線
knexDB.js
const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : 'localhost',
    user : 'root',
    password : '123456',
    database : 'demo'
  }
});
這裡的client可以選擇所需要的database種類,包含mysql,oracle,sql server......等
另外需安裝過該資料庫的驅動(如day5所安裝的mysql)
如沒安裝,啟動時會產生error
三、查詢語句builder
knex('user').select('user_name')
    .then((projectNames) => {
      // console.log(projectNames)
      for(result in projectNames) {
        console.log(projectNames[result]);
      }
    }).catch((err) => {
      console.error(err)
    })

加上where條件
knex('user').select('*').
    where({
      user_name: 'cat'
    })

複合where條件
knex('user')
  .select('*')
  .leftJoin('user_ii', 'user.user_id', 'user_ii.user_id')
  .where('user.user_id', '<' , '16')
  .andWhere((builder) => {
    builder.whereIn('gender', ['2','3','4'])
  })
在where的後面再串上andwhere,但裡面是一個where in 的查詢條件
所以要傳入一個innner function 有builder參數,再進行wherein查詢
四、insert資料
knex('user')
    .insert({user_name: 'knexUserName'})
    .then(result => {
      console.log(result)
    })
回傳主鍵值
五、update資料
knex('user')
  .where('user_id', '16')
  .update({
    user_name: 'zhang',
  }).then(result => {
    console.log(result)
  })

六、刪除資料
knex('user')
  .where('user_id', '16')
  .del()
  .then(result => {
    console.log(result)
  })

七、table join
knex('user')
  .select('*')
  .leftJoin('user_ii', 'user.user_id', 'user_ii.user_id')
  .then((projectNames) => {
        for(result in projectNames) {
          console.log(projectNames[result]);
        }
      }).catch((err) => {
        console.error(err)
      })

詳細語句的方法可以在官網找到
參考來源:http://knexjs.org/
Day6結束